{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "ANG1.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "authorship_tag": "ABX9TyOhnFEOsdst1vVT9nExarjK",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/Divyanshu-ISM/Oil-and-Gas-data-analysis/blob/master/ANG1.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MX2JQfK189kt",
        "colab_type": "text"
      },
      "source": [
        "#Excercise 1: Single variable(Feature) Linear Regression.\n",
        "\n",
        "##$ h_{\\theta}(x) = \\theta_{0} + \\theta_1(x1)$"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sMa19NAd9rRW",
        "colab_type": "text"
      },
      "source": [
        "###Dataset description - \n",
        "The first column is the population of a city and the second column is\n",
        "the profit of a food truck in that city. A negative value for profit indicates a\n",
        "loss.\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "xFAfeQqe7d0c",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import numpy as np\n",
        "import pandas as pd\n",
        "import seaborn as sns\n",
        "import matplotlib.pyplot as plt\n",
        "%matplotlib inline"
      ],
      "execution_count": 72,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "W_d3b2ZACIFB",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from mpl_toolkits.mplot3d import axes3d"
      ],
      "execution_count": 74,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KCqHtBdR-wH2",
        "colab_type": "text"
      },
      "source": [
        "#Part 1:- Importing and Visualization."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yDMMl8jg8xPC",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#Something New.\n",
        "sns.set(context=\"notebook\", style=\"whitegrid\", palette=\"dark\")"
      ],
      "execution_count": 75,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "V0NBlpRM8Jjd",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#Import the dataframe. And give the column headings since csv doesn't have em.\n",
        "df = pd.read_csv('ex1data1.txt', names=['population', 'profit'])"
      ],
      "execution_count": 76,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DOisMED89e3I",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 204
        },
        "outputId": "772b4c7f-cc87-4681-c385-8dcd97523920"
      },
      "source": [
        "df.head()"
      ],
      "execution_count": 77,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>population</th>\n",
              "      <th>profit</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>6.1101</td>\n",
              "      <td>17.5920</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>5.5277</td>\n",
              "      <td>9.1302</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>8.5186</td>\n",
              "      <td>13.6620</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>7.0032</td>\n",
              "      <td>11.8540</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>5.8598</td>\n",
              "      <td>6.8233</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   population   profit\n",
              "0      6.1101  17.5920\n",
              "1      5.5277   9.1302\n",
              "2      8.5186  13.6620\n",
              "3      7.0032  11.8540\n",
              "4      5.8598   6.8233"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 77
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "EdZowt-c9VLy",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X = df.iloc[:,0]\n",
        "\n",
        "y = df.iloc[:,1]"
      ],
      "execution_count": 78,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "W_Qm94x59c5D",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# X iloc and loc access single rows/columns as series. "
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lVz8rJAV9wJz",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "M6aPRpyx-A9l",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "outputId": "6a6ef8b8-865a-4053-f9a4-b7e1fc3cc817"
      },
      "source": [
        "plt.scatter(X,y)"
      ],
      "execution_count": 79,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.collections.PathCollection at 0x7fd78eade5f8>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 79
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "eGlur6Iq-SWQ",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 382
        },
        "outputId": "f0dd9147-d13f-4e36-f5ce-affe20c9cbb1"
      },
      "source": [
        "sns.lmplot('population','profit',data=df)"
      ],
      "execution_count": 80,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<seaborn.axisgrid.FacetGrid at 0x7fd78ea9c4e0>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 80
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 360x360 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "X7sxAM7v-elG",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# Population is in 10,000s &\n",
        "# Profit is in 10,000s."
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "abB5GN9S-tRi",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "####################################################################################"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "TbHwFeNx-4iW",
        "colab_type": "text"
      },
      "source": [
        "#Part 2: Batch Gradient Descent."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "M_781e_E-3yG",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def cost(theta, X,y):\n",
        "\n",
        "  # x = np.array(X)\n",
        "  # y = np.array(y)\n",
        "\n",
        "  h = theta[0]*X.iloc[:,0] + theta[1]*X.iloc[:,1]\n",
        "\n",
        "  m = 97\n",
        "\n",
        "  J = (1/2/m)*(np.sum((h - y)**2))\n",
        "\n",
        "  return J\n"
      ],
      "execution_count": 90,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Y9cZlZBNAapa",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "x0 = np.ones(97)\n",
        "\n",
        "x1 = np.array(df.iloc[:,0])\n",
        "\n",
        "d = {'X0':x0 , 'X1':x1}\n",
        "\n",
        "X = pd.DataFrame(d)"
      ],
      "execution_count": 91,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3kID9qrjEaLh",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 221
        },
        "outputId": "a3023d04-705f-47d5-844a-fda54acf3cfa"
      },
      "source": [
        "# X.iloc[:,0]"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "0     1.0\n",
              "1     1.0\n",
              "2     1.0\n",
              "3     1.0\n",
              "4     1.0\n",
              "     ... \n",
              "92    1.0\n",
              "93    1.0\n",
              "94    1.0\n",
              "95    1.0\n",
              "96    1.0\n",
              "Name: X0, Length: 97, dtype: float64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 64
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "50Dd3e38EhVk",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "5758bfd8-d232-4215-911d-b5c40e9b2379"
      },
      "source": [
        "theta = np.zeros((2,1))\n",
        "\n",
        "theta.T"
      ],
      "execution_count": 92,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[0., 0.]])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 92
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9jGFZCu7AfBX",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "7ed87e08-09af-4a74-f9d1-bc0f0396ceaf"
      },
      "source": [
        "# theta = [np.linspace(-2,2,97) , np.linspace(0,5,97)]\n",
        "\n",
        "J = cost(theta,X,y)\n",
        "J"
      ],
      "execution_count": 93,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "32.072733877455676"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 93
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "GQNynLCxejWO",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "####################################"
      ],
      "execution_count": 94,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GinArm44elTg",
        "colab_type": "text"
      },
      "source": [
        "#Batch Gradient Descent."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "JthNbV52A1K8",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "grad = np.zeros((2,1))"
      ],
      "execution_count": 95,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wLd29HZeA4Md",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def grad_desc(epoch, theta, X, y):\n",
        "\n",
        "  grad = np.zeros((2,1))\n",
        "\n",
        "  m = 97\n",
        "\n",
        "  # h = h = theta[0]*X.iloc[:,0] + theta[1]*X.iloc[:,1]\n",
        "\n",
        "  # grad_0 = (1/m)*np.sum(h - y) \n",
        "\n",
        "  # grad_1 = (1/m)*np.sum(grad_0*X.iloc[:,1])\n",
        "\n",
        "  for i in range(epoch):\n",
        "\n",
        "    h = theta[0]*X.iloc[:,0] + theta[1]*X.iloc[:,1]\n",
        "\n",
        "    grad[0] = (1/m)*np.sum(h - y) \n",
        "    grad[1] = (1/m)*np.sum(np.dot((h - y) ,X.iloc[:,1]))\n",
        "\n",
        "    theta = theta - 0.001*grad\n",
        "  \n",
        "  return theta\n",
        "\n",
        "\n",
        "\n"
      ],
      "execution_count": 107,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "KHBEx48lgtRs",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "theta_final = grad_desc(500,theta,X,y)"
      ],
      "execution_count": 105,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "55zeIRI3g0J0",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "af301a3e-240f-4846-941a-c25723034719"
      },
      "source": [
        "J = cost(theta_final,X,y)\n",
        "J"
      ],
      "execution_count": 106,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "5.678468473590414"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 106
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Fe-HoxKCiisG",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 85
        },
        "outputId": "6204dd32-86c6-4d68-f28b-c38bec2e560e"
      },
      "source": [
        ""
      ],
      "execution_count": 110,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([  0,  20,  41,  61,  82, 102, 123, 143, 164, 184, 205, 225, 246,\n",
              "       266, 287, 307, 328, 348, 369, 389, 410, 430, 451, 471, 492, 512,\n",
              "       533, 553, 574, 594, 615, 635, 656, 676, 697, 717, 738, 758, 779,\n",
              "       800])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 110
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "EaWQnD2YhK0e",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "eps = np.linspace(0,800,40,dtype='int')\n",
        "\n",
        "loss = []\n",
        "\n",
        "for e in eps:\n",
        "\n",
        "  theta_final = grad_desc(e,theta,X,y)\n",
        "\n",
        "  J = cost(theta_final,X,y)\n",
        "\n",
        "  loss.append(J)\n",
        "\n",
        "\n",
        "\n",
        "\n",
        "\n",
        "  \n"
      ],
      "execution_count": 111,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "RB4XDcXuiVQ8",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "outputId": "2ce0db5c-46de-4340-b07c-66d77d90275c"
      },
      "source": [
        "plt.plot(eps,loss)"
      ],
      "execution_count": 113,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7fd78e8cee48>]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 113
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9pQyPZvwi6QR",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 51
        },
        "outputId": "436b30c1-22b2-4535-e0b6-de73a83643ab"
      },
      "source": [
        "theta_final = grad_desc(500,theta,X,y)\n",
        "\n",
        "theta_final"
      ],
      "execution_count": 114,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[-0.26293785],\n",
              "       [ 0.82807516]])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 114
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "3UogltZ8jMnt",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "#Visualization the actual data scatter with the Model."
      ],
      "execution_count": 115,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Zpty2MwDjLNQ",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "y_p = theta_final[0] + theta_final[1]*df['population']"
      ],
      "execution_count": 119,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "km2mmfCijhyd",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "outputId": "9af540d0-7233-4913-d017-648fe534eb83"
      },
      "source": [
        "plt.scatter(df['population'],df['profit'],label='Training Data')\n",
        "\n",
        "plt.plot(df['population'],y_p,label='Model Predictions',color='red')\n",
        "\n",
        "# plt.figure(figsize=(8,4))\n",
        "\n",
        "plt.legend()"
      ],
      "execution_count": 123,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.legend.Legend at 0x7fd78e651198>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 123
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXYAAAD7CAYAAAB+B7/XAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3de1xUdf4/8NfMNCAXBUFlUVRcE6XwUqhpZn6Ffqmpodv607ytWVlZ6WImuJB4AQtztTRb47ffbhtla4IEalbWVptZQhahpm7rHcO4SNzBmfP7g2a4zDlzv52Z1/Px2MdjmTNz5s14es2Hz/lcFIIgCCAiIo+hdHUBRERkXwx2IiIPw2AnIvIwDHYiIg/DYCci8jA3uOqNtVot6urqoFaroVAoXFUGEZGsCIKAlpYWBAQEQKkUb5ubDPaqqiqsWrUKFy5cgI+PD/r374/169cjJCQEgwcPRlRUlP7kmzZtwuDBg80qrq6uDqdPn7bg1yEiIp2oqCh07dpV9JjC1Dj2a9eu4dSpU7jtttsAAJmZmaiursbGjRsxePBgfPvttwgICLC4qMbGRhw/fhxRUVHw8fGx6LUlJSWIiYmx+D1dSW41s17Hk1vNrNfxzKm5ubkZp0+fxs0334wuXbqIPsdkiz04OFgf6gAwYsQIvPPOOxaWa0jX/eLj4wNfX1+LX2/Na1xNbjWzXseTW82s1/HMrdlYF7bJFnt7Wq0WixcvRlxcHBYuXIjBgwfj5ptvhkajwZ133oknn3zS7NZ3U1MTSkpKzH1rIiJqJyYmRvpLQLDA2rVrhccee0zQaDSCIAhCaWmpIAiCUFNTIzz66KPCli1bzD5XY2OjUFhYKDQ2NlpSgiAIglBYWGjxa1xNbjWzXseTW82s1/HMqdmc7DR7VExmZibOnz+PnTt36m+WhoeHAwACAwMxa9YsvPbaazZ/C2m1Wly6dAl1dXWSz7nhhhtw8uRJm9/LmeRWs7vWGxAQgIiICMnRAERk5nDHLVu2oKSkBFlZWfqulurqavj6+qJLly64fv06Dh48iOjoaJsLKi8vh0KhwODBgyX/462rq7Pqhq0rya1md6xXq9Xi8uXLKC8vR69evVxdDpHbMhnsZ86cwSuvvILIyEjMmTMHABAREYGHHnoIa9asgUKhwPXr13HLLbdg+fLlNhd07do1REZGskVGBpRKJcLCwnD+/HkGO8lSdm4xUjIP4UJpNfr1DkJGUjzmzRxm9/cxGeyDBg3CqVOnRI/l5+fbvSCNRgO1Wm3385JnUKvVuH79uqvLILJYdm4xliTlo76hBQBw/nI1liS1Zqi9w90tm8WciUpSeG2QXKVkHtKHuk59QwtSMg/Z/b3cMtiJiDzNhdJqix63BYPdhLi4ONxxxx3QaDT6x3JycjB48GC89dZbFp9vwYIF+PTTT816X7ElFy5duoSbbroJCQkJmD59OmbPnm2X0SvJycn63+fFF1/EwYMHjT7/5MmT2L9/f4fHEhIS0NjYaHMtRJ6oX+8gix63BYPdDL169cK///1v/c+5ubm4+eabXVZP165dkZeXh/z8fNxzzz34y1/+YvAcW/qhly9fjkmTJhl9zsmTJ/HBBx90eCwvL09yijORt8tIioe/X8f7h/5+amQkxdv9vVy2uqPZ3nwTePXVDg910WgAlcr2cy9eDCxcaPJpM2fORE5ODiZMmICLFy+ivr4eUVFR+uN1dXVIT0/HDz/8AKC15frwww8DAP7zn/9g9erVqK2txZAhQ9DU1KR/3dWrV5Geno7S0lI0NTVh6tSpePTRRy36FcaNG4etW7cCaG3l33PPPThy5AiioqKwdu1abN26FUePHkVzczMGDx6MtWvXIiAgAGVlZVi1ahV++eUX9OnTp8MopOTkZAwaNAgPPvggmpubsXXrVnzxxRdQKpXo27cv0tPTsW3bNtTW1iIhIQGjRo1Campqh7WDiouLkZGRgfr6evj7+yMlJQXDhg3DpUuXcN9992HOnDn47LPP0NDQgIyMDIwcORIVFRV46qmnUFFRAQAYO3as6JcWkRzpbpC6xagYAkaPHo23334b1dXVyM3NxYwZM3D8+HH98ZdffhlarRb5+fmoq6vD7NmzERUVhQkTJmDVqlVYsGAB7r77bpw5cwb333+//nVJSUlYunQpRo0ahebmZixatAhDhw7FuHHjzK7tgw8+6DB/oLa2Fu+9956+rq5du+p/fv7555GVlYXExESkp6dj1KhReOKJJ3Dx4kXce++9GD9+vMH5s7KycPHiReTk5MDHxweVlZXo3r07li1bhn/961/Ytm2bwWuam5uxbNkyPPvssxg7diwOHz6MZcuW4cMPPwTQOqR1xIgRSExMxPvvv4/Nmzdj165dyM/PR79+/fD6668DaJ0rQeRJ5s0c5pAg78z9g33hQoNWdaOTJ88oFApMmTIF+/btw759+7Br164Owf7VV1/hL3/5CxQKBQIDAzF16lR89dVXiI2NxenTp5GQkICGhgaMGDFC39Kvr6/HN998g8rKSv156urq8NNPP5kM9pqaGiQkJEAQBPTt2xfPPfec/tiMGTP0//+TTz5BbW2tvr+8ubkZQ4YMAQB8/fXXSE1NBQD07dsXY8eOFX2vTz/9FMnJyfqJaSEhISY/r7Nnz0KtVuvPefvtt0OtVuPs2bMICAiAv78/Jk6cCKB1UbnMzEwAwPDhw/H6668jMzMTo0ePxh133GHyvYjIkPsHu5uYOXMmZs2ahVGjRqF79+42n0+r1UKhUOC9996zeNy+ro9djL+/v/7/C4KAtLQ0ydB2lfYLxSmVSv39gFtuuQW5ubk4fPgw8vLykJWVZZeVRIm8DW+emqlv375ITEzE0qVLDY6NHTsWe/bsgSAIqK2txf79+3H77bcjMDAQUVFR+olcxcXF+pEugYGBiI2NRVZWlv48V65cwS+//GK3muPi4vD666/rR6rU1tbip59+AgCMGTMGe/bsAQBcvHgRX331leg5Jk6ciDfeeAPNzc0AoP8LIzAwEDU1NaKvGTBgAFpaWnDkyBEArX/RXL9+HQMGDDBa78WLF/V/8axevRrHjx+HVqu18LcmIrbYLTB79mzRx5cuXYoNGzZg+vTpAIB7770Xd955J4DWXaVWr16NV155BUOGDMHQoUP1r9u8eTOeffZZ/esCAgKQkZGBnj172qXeJUuW4KWXXsIf//hHKBQKKBQKPPHEExg4cCBSUlKwatUqFBQUICIiosOa+53P8de//hUzZsyAWq1G//79sW3bNowdOxavvvoq7r33XowePVrfrQO0tsi3bdvW4ebpiy++aHJJ52+++Qavv/46lEoltFot1q1bx6UlvIizptt7A4vWY7cn3XrsndcUPnnypMnFxNxxgSpT5FazO9crdo0UFRUhNjbWRRVZR241O7LeztPtgdahgFmZ060Od7l9voB5NUtlZ3tsDhGRyzlzur03YLATkcs5c7q9N2CwE5HLOXO6vTdgsBORyzlzur03YLATkcvNmzkMWZnT0b9PEBQKoH+fIJtunHaWnVuMyDFboey3FpFjtiI7t9gu53VXHO5IRG7BUdPtnbnBhbtgsBsxa9YsNDc3o6WlBefOncOgQYMAADfddBOeffZZs87xzjvvoKmpCbNmzTL6vEOHDqGwsBBJSUk2162TnJyMw4cPIyQkBPX19QgNDcXs2bM7LDsgpbCwECqVitP6SfaMjbhhsLs5R0xu2L17NwDoVyQUm8Z//fp13HCD9MeoW/Srrq7O6HvFx8cjPt7+/YlLlizB/PnzAbSO//7zn/+MqqoqPPDAA0ZfV1hYiOvXrzPYSfa8ccSNRwS7s//U6rw8bmJiIlasWIG6ujo0NTXpV3UEgO3bt6O+vh5PPPEEcnJyUFBQgG7duuHMmTPo2rUrtm/fjp49eyInJ0e/WuLXX3+NjRs3Yvjw4Th27BgUCgW2bt2KgQMHAgC2bt2K/fv3Izg4GKNHj8ZXX32FnJwck3VHR0cjJSUFycnJWLRoEcrLy0XrPnXqlH6JhMOHD2Pq1KlYvHgxHnnkEVRVVaGpqQnDhg3DunXrTM4mJXK1fr2DcP6yYYh78ogbj7h56orJDbrlcTdu3Ihu3bph586dyMnJwd69e1FSUoLPP/9c9HU//PADkpKSsG/fPtx4442SuzD95z//wZw5c5Cfn48pU6bg5ZdfBtC6YuOnn36KvLw8vPvuuzh//rxFdQ8fPhwVFRWorKyUrHvw4MG47777MGPGDOTl5WHJkiVQqVTYvHmz/stJo9Ho15ohcmfeOOLGI1rsrvhTq30/tUajwaZNm3Ds2DEIgoDy8nL8+OOP+vVi2rv11lsRHh4OoDVkDx8+LHr+AQMG4KabbgLQurStbju9r7/+GlOmTNGv4jhjxgx96Juj/QoSltSt1Wrx6quv4vPPP4dWq0V1dTV3SyJZ0P3VvnzNAVRcawAA+HXxiOiT5BG/nSv+1Gq/PO5rr72GX3/9Fbt374avry+eeeaZDjsltdd+bQeVStVhL9X2pJa2tdUPP/yA0NBQhIaGYseOHWbXnZ+fj6KiImRnZyMwMBA7d+7EuXPn7FITkTM0NLX9N1RR1eDRI2M8oivG1X9q1dTUoGfPnvD19UVZWRkOHXJcF9Do0aNx8OBBNDQ0QKvV4v333zf7tT/++CM2btyo37bPWN2dl+WtqalB9+7d9Y8XFBTY75cicjBvW4vGI1rsztxLUMyCBQuwfPlyTJs2DWFhYQ7d2CI+Ph7Hjh3Dvffei6CgIIwYMcLoFnJZWVnYvXs3GhsbERISgkceeUTfjWSs7okTJ+Lpp59GQkICpk6divvvvx+HDh3C5MmTERoaitjYWMnWPZG78baRMVy210nsWXNtbS0CAwOh1WqRkpKCXr16ITEx0S7n1nHnz5jL9rqGnOuNHLNVtLu2f58gnDti3/92bMFle71YUlISZsyYgXvuuQfNzc36rhUiEufq7lpn84iuGG+zY8cOV5dAJCuu7q51NpPBXlVVhVWrVuHChQvw8fFB//79sX79eoSEhOC7777DmjVr0NTUhD59+uD5559HaGiozUUJggCFQmHzecjzuKjnkDyAo9aicUcmu2IUCgUeeughHDx4EPn5+ejbty82b94MrVaLp59+GmvWrMHBgwcxcuRIbN682eaCVCoVWlpaTD+RvFJLS4vRJRyIyIxgDw4O7rDR8YgRI1BaWoqSkhL4+vpi5MiRAIA5c+bggw8+sLmg4OBglJWVcXd6MqDValFWVoagIM+dCk5kDxaNitFqtVi8eDHi4uIQFhaGPXv2ICsrS398+PDh+OyzzxAcHGzyXLo7u2KUSiV3pydRWq2WX/pEgNFRMRb9Tbthwwb4+/tj/vz5+OijjxxenBS5DbsC5Fcz63U8udXMeh3PkuGOxpgd7JmZmTh//jx27twJpVKJ8PBwlJaW6o9XVlZCqVSa1VonIiLHMau/Y8uWLSgpKcGOHTv0a5jExMSgsbERhYWFAIBdu3Zh8uTJjquUiIjMYrLFfubMGbzyyiuIjIzEnDlzAAARERHYsWMHNm3ahLS0tA7DHYmIyLVMBvugQYNw6tQp0WO33nor8vPz7V4UERFZj0NPiIg8DIOdiMjDMNiJiDwMg52IyMMw2ImIPAyDnYjIwzDYiYg8DIOdiMhM2bnFiByzFcp+axE5Ziuyc4stO8GZM8Do0cCaNY4p8DcMdiIiM2TnFmNJUj7OX66GIADnL1djSVK+6XC/fBm4+25AoQCiooCjR4ENGwAHbhrj1cFu87cvEXmNlMxDqG/ouAlQfUMLUjIPGT65shKYM6c1zCMigPar4f7v/wJabesxB/HarWh03766fyjdty8Ar9k+i4jMd6G02vjjtbXAypXAK68YPumvfwWWLwdUKgdW2MZrW+wWffsSkdfr19tw5y61oMF2zb9bW99du3YM9ZQUoKmptctlxQqnhTrgxS12k9++RETtZCTFY0lSPhrrm/BU7VfYVP2x4ZMefxzIzAQCApxfYDteG+z9egfh/GXDEBf7ViYix8vOLUZK5iFcKK1Gv95ByEiKd59uUUHAvI0PYt6ZQsNjc+cCL70EdO/u/LokeG1XTEZSPPz91B0e8/dTIyMp3kUVEXkvq0ecONrs2a3dLEolUNgu1ENCWke7CAKQne1WoQ54cbDPmzkMWZnT0b9PEBQKoH+fIGRlTnefFgKRF3Gre15JSa1hrlAA//xnx2MHD7aGeUUF0Lu382szk9d2xQCt4c4gJ3I9l9/z2r4dWLZM/NgbbwALFzqnDjvx2hY7EbkPqXtbDr3n9d57bS3zzqH+3HOtLXNBkF2oAwx2InIDTrvn9eabbWE+a1bHY0uXtoV5UpJ939fJvLorhojcg65L1CGjYnbtAu6/X/zY1KlAfr5DZ4G6AoOdiNyCXe95HT6M2HHjpI9fv+7UCUPOxmAnIs/w3/8CAwdKH6+qAoKDnVePCzHYiUi+rl0zPob87FkgMtJp5bgL3jwlInlpaWm7ASoW6ocPA4KAosJCrwx1gMFOZBUu+exkgtAW5j4+hsfffbdtRMvYsc6vz80w2Iks5LbT3z2RLsyVIlGVnt4W5v/3/zq/NjfGYCeykFtNf/dE3bq1BXpn99/fFuYpKc6vTSZ485TIQi6f/u6JjI0jHzIEOHnSebV4ALOCPTMzEwcPHsTly5eRn5+PqKgoAEBcXBx8fHzg6+sLAFi5ciXGjx/vuGqJ3ACXfLaT6Gjgxx+ljztwT1BPZ1ZXTHx8PLKzs9GnTx+DY9u2bUNeXh7y8vIY6uQVuOSzDR5+uK2bRSzUdd0sDHWbmBXsI0eORHh4uKNrIXI4e4xm4ZLPFvrb39rC/O9/Nzx+/TrD3M4UgmD+pxkXF4edO3d26IoJDAyEIAiIjY3FihUr0K1bN7PO1dTUhJKSEuuqJrLCgc8uIePlYjQ2afSPdfFVIWXpMEyZEOHCyjxPYGEhBj/6qOTxY//6F7SBgU6syPPExMTou8E7s+nmaXZ2NsLDw9Hc3IyMjAysX78emzdvtltxUoqKihAbG2vRa1xNbjV7Yr33Pf55h1AHgMYmDf7+z/8idUWCI8sT5XGf8U8/ATfeKH38zBn98VvsXJsYuX2+gHk1m9Motmm4o657xsfHB3PnzsW3335ry+mIHIqjWRzg11/bulnEQv2jj9q6WYyFPtmV1cFeX1+PmpoaAIAgCNi/fz+io6PtVhiRvblkMwdPpNG0hXmQyGf30kttYX7XXc6vj8zriklPT8eHH36I8vJyPPDAAwgODsbOnTvx5JNPQqPRQKvVYuDAgUhLS3N0vURWy0iKx5Kk/A6TiziaxXyxI0dKH1y0CHjtNafVQsaZFeypqalITU01eHzv3r12L4jIURy6mYOnMjZxaNAg4PRp59VCZuPMU/Iq3MDcDKZ2E+KwRLfHtWJkgqsJkkMFBkqvzwK0LYPLUJcFBrsMcDVBy/GL0AzTprWFeV2d4XHOApUtBrsMcDVBy/CL0IgNG9rCfN8+w+NaLcPcAzDYZYDjry3DL8JOcnLawnzNGsPjDQ1tYW6qf51kgcEuAxx/bRl+EQIoLm4L8/vuMzxeWtoW5l26OL8+cigGuwxwNUHLeO0X4dWrbWE+fLjh8aNH28Kci/p5NAa7DHA1Qct41Rdhc3NbmIeFGR5/++22MDc2wYg8CsexywTHX5vP4yciCYL4HqA6q1cDGzc6rx5yOwx28kge+UVo7Mbm//wP8OmnTiuF3BuDncidcRYoWYHBTuRuGOZkI9489WCcfSkjt9xicko/Jw6Rudhil5Hs3GKzbwjqZl/qJuroZl8C8Ly+Z5no/O+3+4aPgS/3S7+AIU5WYrDbwJKgtfX8IUF+qKlrRnNL69ZupoLa2OxLBrvz6b5oZ5UfxetVecBFiSe2tAA38D9Lsg2vICs5ukXc+fwV1xoMnmMsqDn70o0UFWHeH0ZintTxykqge3dnVkQejsFuJUe3iMXOL0YqqPv1DsL5y4bHPH72pbsoLQX69JE8PDjscZxW94BCAWgZ6mRnDHYrObpFbO55pIKa28C5QH09EBAgefiOng/gS99+HR7jFy05AkfFWMnR65GYcx5jQc1lCJxEq20bzSIW6m+8AQgCsnO+x7HggR0OdfFV8YuWHILBbiVHr0cidn61WonQ7n5mB/W8mcNw7kgitBfW4tyRRIa6PenCXKUyPLZqVdvQxIULAYh/0aYs9cDZseQW2BVjJUevR+Lx653IkbGJQ/HxwMcfG31552UOioqK7FUZUQcMdhs4ej0Sj1zvRG44C5RkiF0xRJ316MFZoCRrDHYioHWXIV2YV1QYHmeYk4ww2Ml7rVzZFuY5OYbHubEzyRT72Mm7vP02ME9yDihQVwf4+zuvHiIHYLCT5ysqMr4t3NmzQGSk08ohcjR2xZBHyvnfj9u6WcRC/ZNP2rpZGOrkYUwGe2ZmJuLi4jB48GCcPn1a//jZs2cxe/ZsTJo0CbNnz8a5c+ccWSeRaU1N+jD/w0P/x+Dw0QeT2sJ84kQXFEjkHCaDPT4+HtnZ2ejTaUGjtLQ0zJ07FwcPHsTcuXOxZs0ahxVJZJRCgdiRI4EuXQwOfew7AIqINCgi0jCrJMwFxRE5n8k+9pEif8ZWVFTgxIkTeO211wAA06ZNw4YNG1BZWYmQkBD7V0nUmYmJQ4qINIPHuGQxeQurbp5euXIFYWFhUP22ToZKpUKvXr1w5coVi4O9pKTEmhJkOR1bbjW7W72xxm6AAigqLAQATHv4Y+AXw/Xrw3r4ud3v5G71mMJ6Hc8eNbt8VExMTAx8fX0tek1RURFiY2MdVJFjyK1mt6nXzCn97evd/IxadMnizc9MQWys+yzR4DafsZlYr+OZU3NTU5PJBrFVo2LCw8NRVlYGjaZ1mzaNRoOrV68iPDzcmtMRdaQbzWLllH4uWUzezqoWe2hoKKKjo1FQUICEhAQUFBQgOjrabfrXHb0XKTlASAhQVSV93MLZn1xAjbyZyRZ7eno67rzzTvz888944IEHMHXqVADA2rVr8dZbb2HSpEl46623sG7dOocXaw7dXqHnL1dDENr2Is3OLXZ1adTZAw+0tczFQr2pyeFT+rNzixE5ZiuU/dYicsxWXifkEUy22FNTU5Gammrw+MCBA7F7926HFGULR+9FSjZ64w1g0SLp4+fOAf37O6UUR29ITuQqHjfz1NF7kZIVvvuurWUuFuoffNDWMndSqAPGGwFEcuZxwe7ovUjJTFVVbWF+yy2Gx9etawvzSZOcXx/YCCDP5XHB7ui9SMmI9hs7i91Iv/32tjB3g5nKbASQp/K4YOdQNxcwtrEz0BbmX37p3LpMYCOAPJXLJyg5Aoe6OYEH7AXKDcPJU3lksJODeECYd8ZGAHkij+uKITuzcRaouTienMh+2GInQwoFjK5WYeeWOceTE9kXW+zUauhQoy1zVZ9noIhIQ8CgdLu3pjmenMi+GOzebNmytjAXWS3ullvX6zep0CpaLxVHBC7HkxPZF4Pd2+zd2xbm27cbHP6fiEeQnfM9igoL8f0vGtFT2DtwOZ6cyL4Y7G7OLjcVz5xpC/OZMw0Orwq6S98y/wy/07fInRW4HE9OZF9eFexyG3lh00qV9fVtYR4VZXj8jjug7Nsa5s93HdfhkK5F7qzA5aQyIvvymlExchx5YdVKlRaMNe83ZivOXzbsVtG1yK2dwGPNevgcT05kP14T7HJcztfsm4pWThzKSIoX3UKutUXe+pilgSvHL1AiT+M1XTFiLVNjj9uLrvtn1Mx8ffePuV1CRvu4TUwcys75HpG3bYGyb5rkexjrAjnw2SV9jT2GZqLHsEyzurA4dJHI9bymxa5SKaDRGLZcVSqJYLTD9npirdfFT+VBgICWFq3+sfYt2vbvGxLsB7VaqX+ucOm3XaouSbzhby1zS1rNYi3y7NxiZLxcjMam1lExFdca9MdMtcA5dJHI9bwm2MVCXepxe3UniLVem1sMhxC2b9G2f9+Kqoa2MJci0s1ia7dTSuYhfaiLMXaufr2DjPbbE5HjeU1XTP8+4sEi9ri9uhMsaaVeKK3Wv69waZ3+f6K0WqPrs9jaajbneVLP4dBFItfzmmC3JHDs1Z1gSStVe3Edzn29QjrMq6rawtzEzVJbx5+b8zyp53DoIpHreU2wWxI4UqGlVCosGvsu9mXio1ZBrW792HPLdxltmU/ssRCKiDRE3rYFCA626X0taTVnJMWji6/EphlmnGvezGE4dyQR2gtrce5IIkOdyMm8po8dMH/ontgwQKC1P96SvnaxceDZY5sw7oXVkq95s9ut+FO36fqfrenGsHUDiXkzh+Hs2bP4+z//23oTN8gPUACV1xq4GQWRDHhVsJtLF1p/Ssw1uLlq6dj3eTOHYd6wAODGG4GLAL6WeOJv/eWq3GL0zzyE85eroVIpOvTtWxKmtk74mTIhAqkrEqx+PRG5juy6YrJzizHt4Y8dvizAvJnDoNVadnOyg/YbO994o/hzRDapmDdzmL4rRfelYtFSAkTk9WQV7LphiD//0mD52ilmnr/9xKGQID/R5xm9uWjuxs5GNqvgJB8isoWsgt2RgSe24Fb7iTk6nfu8s3OLzdo+rqiw0OydhxwxycfdF0Bz9/qI5ERWfeyOnNUo9qXRWWiwH15cP6W17/q3EJ8n9WQbto+z9yQfd1+/xd3rI5IbWbXYpYItJFi8y8QS5qwZU16SjHl/GC7ZMtetaR552xabajF3uKK5rVx379px9/qI5MbmFntcXBx8fHzg6+sLAFi5ciXGjx9vc2FiMpLisfipPINp+b/WNiE7t9im1p3UWjKmpvQrItIMHhP7C+LAZ5dw3+OfmzX80Jzhipa0ct19/RZ3r49IbuzSFbNt2zZEiW3mYGfzZg7D8jUHDPq+W1q0Ni+/2z7UTa7P0tAAdOmCyDFbAZGWviAAkWO26sO486Ja5nQ1mBquaMl6MO6+fou710ckN7LqigGAymrDG5qA7a07U+uz3NH3MWTnfN+a2l26ABDvMtFpP2JHbFEtW7saLGnluvv6Le5eH5HcKATBhrt8aO2KCQwMhCAIiI2Nxd21JkAAABGYSURBVIoVK9CtWzeTr2tqakJJSYnF7zft4Y/x8y+G4f67nn4o+H93dXjswGeXsOOtH1FW3oCwHn54fP4QTJkQoT/ef8MG9MjLk3yvjK53IDUoHkFd1Vj5UEyH13Z+D7GadHWVlTdI3kvVHRerzxhLPof2dVrzXs7g7vURuZuYmBh9F3hnNgf7lStXEB4ejubmZmRkZKCurg6bN282+TpdsBsrTkx2bjEeejqvQwvY309tsO5L5z5o3fNyF0Xg7pRFRt9D12/eYRSMCcp+a0XDW6GQ7mpQKDoOnhH7PaRI/X72WnCrqKgIsbGxNp/HWeRWLyC/mlmv45lTsznZaXMfe3h4OADAx8cHc+fOxWOPPWbrKY3qvI5J5xuLuq6P9kHqp21BfenG1h9SJE7cLmGt+aaTCm/dmHgTbwnA+HIFYht/ZGVOt3kzECLyPDYFe319PTQaDbp27QpBELB//35ER0fbqzZJUuuYdG7FWrNJhbWkFg6z1PnL1R1uvALSI2CyMqfj3JFEm2snIs9iU7BXVFTgySefhEajgVarxcCBA5GWZjj8z1lSMg+h7kyq0edE3rbFIWHYfoiirfuodh41Y8uOSPbY4o+I5MWmYO/bty/27t1rr1qs99uEoXNSh3/rM/f3UyPLDiMtpMJSF5jzl+XY/B7tg9vacd6c0UnknWQ33FG3umOxT5jR9Vl0s0B1oW6vnXzE1pRpvxCZJUMYQ7v7SW7ZB7QFt7U7InFGJ5F3klWw60L1yrFkDGu5ang853sEDErvMBvU30+Nt7b9waKdfIxN1TcVluaOp/f3U+PFdVNw7kiiZLjrgtvacd6c0UnknWQV7GKhquizBpG3bUF2zvf64ypVayvemla6qRa5qbA0d7Zk+7pMBbe1+4jauvcpEcmTrIJdF54dulkUCn346m5aajQC1GolauubsWB5jkXLwJpqkRsLy+zcYtTWN5t8j/59gjqEsjnBbc0+opzRSeSdZBXsUqGq20KuvZYWLSqq2jbkmL8sB8p+a7H0LwVG38NUi1wqLO+JG4QlSfmoqBKfgdr+uWLB6ogNoK1t6RORvMlqPXaxseL+fmqzx44LAvC3fxQCAF7eOE3/ePtRLkql+CqPui8VqZUXpdZzDw32Q2CAj8uGG9q69ykRyY+sgl0XUCs3HEBZeUOHULVk7HjW20X6YO88JFAs1Du3ssXCcsFy8SGOldUNKP8hSZbTm4lInmTVFSPF2CqLYtqHt1RLW6VS8EYlEcmSrIJdajNrAPq+ZHPoRs0A0n3qWq3AG5VEJEuyCnZTU+uNjQlvb8ncti4Rye32gizbbo83KonIXcgq2M2ZcGOqWyYwwAfjRvXr8Hy12vBjqKlrNnuIpI4jRrYQEVlKVsFuTj9255ZzaLAffNQq/fHauuYOE47mzRyGboGGaxo3t2g49Z6IZElWwW5uP3b7lnNggI/B5ted10upvOaY7faIiFxBVsGua40HdW0Ldz/fG/Dl0QuSa7uY033DES1E5ElkFew6Tc1a/f+vuNaAv/2jsMPaLoufytOHu7GboLrncEQLEXkSWU1QAlpHxrTf71RMc4sGy9MOAGi9CSpGEIAHnmpdS15qNilvfhKRHMku2M3t966oakBK5iGD/vX2Wlq0+qGSnHpPRJ5Cdl0xlvR7m/Ml0P45xtZhJyKSC9kFe0ZSPLr4qkw+LzTYz6wvAaVSgezcYpPrsBMRyYXsumLmzRyGs2fP4u///C8ulFYjJNgPVdUN0LbdT4VarcSL66cAgMFqkJ1pNAKWJOXDz/cGqzeMJiJyJ7ILdgCYMiECqSsS9D+3X3Y3JMgPTS0a/YbSAX5qhHb3Q0VVA5RKBbRaw9Ub6xtaJMPfnO4cqc2tiYhcQXZdMWJ0E5L+8eIfUFPXjNp2I2HqGlrwa20T3tr2B2jOp0ntfS3JVHcOu3CIyN14RLDrSI2CaWnR4k+JucjOLZYc1x7gr7ZqLLuprfSIiJzNo4Ld2GYbur70Jonhj118b8Cf/jhcv6SvSqXAn/443GSXijkzW4mInEmWfeyAYb/2PXGDTL7G2E3UiqoGvPHe9/pNODQaAW+89z3GjepnNNz79Q4S/ULhcgRE5CqybLEf+OySQb+2bi9Ta4ltiF3f0II/JeYaHdfO5QiIyN3IMth3vPWj2RtYi+l8A9XfTy261ynQ2nI3dlOUG2wQkbuxOdjPnj2L2bNnY9KkSZg9ezbOnTtnh7KMKysXX2bXXIIAgyA2Z+clqZuijthgg7NgichaNvexp6WlYe7cuUhISEBeXh7WrFmDN9980x61SQrr4Yeff7E+3Pv3CcK5I4kGj5uazAQ456aobgilrpb2e7vyLwEiMsWmFntFRQVOnDiBadOmAQCmTZuGEydOoLKy0i7FSXl8/hCrXyvV/925S6X9htftOeOmKIdQEpEtbAr2K1euICwsDCpV69otKpUKvXr1wpUrV+xSnJQpEyIQ2t2yzaYB0/3f7btU3tg602U3RTmEkohs4fLhjiUlJVa97s+LhiDj5eIOa7N38VXB10eJ6hrD7pTf9fTDnh13AmhBUVGRyfMP6QesfjQGO976EWXlDQjr4YfH5w/BkH7mvV6Mua+T6moK6+Fn9Xtbw5nvZQ9yqxeQX82s1/HsUbNNwR4eHo6ysjJoNBqoVCpoNBpcvXoV4eHhZp8jJiYGvr6Gm0kbU1RUhNQVCRgwYIDBGi2AYV+5v58am5+ZgthYy/qnY2NjO6xJY4uioiLExsaa9dzNz6jt9jtYy5J63YHc6gXkVzPrdTxzam5qajLZILapKyY0NBTR0dEoKCgAABQUFCA6OhohISG2nNYmnjD80BN+ByJyHZu7YtauXYvk5GS8/PLL6NatGzIzM+1Rl0mmRo7IPQQ94XcgItewOdgHDhyI3bt326MWixgbOcJAJCJvJsuZpwBHjhARSZFtsEuNJw8JtnwYJBGRJ5FtsGckxcNHbbj36a+1TTZNv+dUfiKSO9kG+7yZw9A1wMfg8ZYWrdUzNLkbEhF5AtkGOwBUVouvF2NtPzun8hORJ5B1sEv1s1u7ngtvyBKRJ5B1sNt7kwt7f1EQEbmCrIPd3jM0uRsSEXkCly8CZit7ztDUnafz+jOc8EREciL7YLc3TuUnIrmTdVcMEREZkl2wZ+cWY9rDH3MCERGRBFl1xXAvUCIi02TVYucEIiIi02QV7JxARERkmqyCnROIiIhMk1WwcwIREZFpsgp23UzT3/X0416gREQSZDUqBmgN9yH9WmS3+zgRkbPIqsVORESmMdiJiDwMg52IyMMw2ImIPIzLbp4KggAAaG5utur1TU1N9izHKeRWM+t1PLnVzHodz1TNuszUZagYhWDsqAPV1NTg9OnTrnhrIiLZi4qKQteuXUWPuSzYtVot6urqoFaroVAoXFECEZHsCIKAlpYWBAQEQKkU7013WbATEZFj8OYpEZGHYbATEXkYBjsRkYdhsBMReRgGOxGRh2GwExF5GAY7EZGHYbATEXkYt95oIy4uDj4+PvD19QUArFy5EuPHj+/wnIaGBqxevRrHjx+HSqVCUlISJk6c6PRaL126hMcff1z/c01NDWpra/HNN990eN727dvx9ttvo1evXgCAW2+9FWlpaU6pMTMzEwcPHsTly5eRn5+PqKgoAMDZs2eRnJyMa9euITg4GJmZmYiMjDR4vUajQXp6Or744gsoFAosWbIEs2bNcmq9VVVVWLVqFS5cuAAfHx/0798f69evR0hIiMHrk5OTcfjwYXTv3h0AMHnyZDz22GMOq1eqZsC8axlw/vUsVq+51zLg/OvZ2L//d999hzVr1qCpqQl9+vTB888/j9DQUINzOPMzlqq3uroaa9aswS+//IIbbrgBQ4cORVpaGrp06WJwjgULFqC0tBSBgYEAgIULF+K+++4z/saCG5s4caJw6tQpo8/Zvn27kJKSIgiCIJw9e1a4/fbbhdraWmeUZ1R6erqwbt06g8e3bdsmPPfccy6oSBCOHj0qlJaWGnyuCxYsEPbu3SsIgiDs3btXWLBggejrc3NzhcWLFwsajUaoqKgQxo8fL1y8eNGp9VZVVQlHjhzRP+e5554TVq9eLfr6pKQk4R//+IfD6hMj9Rmbcy0LgvOvZ6l625O6lgXB+dez1L+/RqMR7rrrLuHo0aOCIAjCjh07hOTkZNFzOPMzlqr34sWLwvHjxwVBEASNRiMsX75ceOmll0TPMX/+fOGTTz6x6H1l3xVz4MABzJ49GwAQGRmJmJgYfP755y6tqbm5Gfn5+aa/VZ1s5MiRCA8P7/BYRUUFTpw4gWnTpgEApk2bhhMnTqCystLg9fv378esWbOgVCoREhKCu+66Cx988IFT6w0ODsZtt92m/3nEiBEoLS11WA2WEqvZEs6+nk3V627XstS/f0lJCXx9fTFy5EgAwJw5cySvTWd+xlL1RkRE4KabbgIAKJVKDBs2zK7XsdsH+8qVKzF9+nSsXbsWv/76q8Hx0tJS9OnTR/9zeHg4fv75Z2eWaOCTTz5BWFgYbr75ZtHj+/btw/Tp07F48WIcO3bMydV1dOXKFYSFhUGlUgEAVCoVevXqhStXrog+t3fv3vqfXf1Za7VavPPOO4iLi5N8zmuvvYbp06dj6dKl+Omnn5xYnSFT1zLgftezqWsZcN313P7fv/O1GRISAq1Wi2vXrhm8zlWfsdT12tjYiD179hi9jjdt2oTp06dj5cqVKCsrM/lebh3s2dnZeP/997Fnzx4IgoD169e7uiSz7NmzR7KFM2fOHBw6dAj5+fl48MEHsXTpUlRVVTm5Qs+wYcMG+Pv7Y/78+aLHExMT8dFHHyE/Px933303HnroIWg0GidX2coTr2XAtdezqX9/dyNW7/Xr15GYmIgxY8YgPj5e9HWbNm3CgQMHsHfvXvz+97/Hn//8Z5Pv5dbBrvsT0cfHB3PnzsW3335r8JzevXvj8uXL+p+vXLmC3/3ud06rsbOysjIcPXoU06dPFz3es2dPqNVqAMC4ceMQHh6OM2fOOLPEDsLDw1FWVqYPPI1Gg6tXr4r+eR4eHt7hz0VXftaZmZk4f/48XnjhBcmlS8PCwvTHZsyYgfr6epe1fs25lgH3up5NXcuA667nzv/+na/NyspKKJVKBAcHG7zWFZ+x2PWq0WiwcuVKBAUFITU1VfK1umtHpVJh4cKF+P7776HVao2+n9sGe319PWpqagC0rj+8f/9+REdHGzxv8uTJePfddwEA586dww8//CA62sBZcnNzMWHCBP1IjM7a/xl18uRJXL58GQMGDHBWeQZCQ0MRHR2NgoICAEBBQQGio6NFR5lMnjwZu3fvhlarRWVlJT7++GNMmjTJ2SVjy5YtKCkpwY4dO+Dj4yP5vPaf9RdffAGlUomwsDBnlNiBudcy4F7Xs6lrGXDN9Sz27x8TE4PGxkYUFhYCAHbt2oXJkyeLvt7Zn7FYvVqtFsnJyVCpVMjIyJDck+L69esoLy/X/7xv3z5ERUVJNmZ03HY99osXL+LJJ5+ERqOBVqvFwIEDkZqail69eiEhIQFZWVkICwtDfX09kpOTcfLkSSiVSjz99NO46667XFb3pEmTkJKSgjvvvFP/2MMPP4xly5Zh6NChSEpKwvHjx6FUKqFWq7Fs2TJMmDDBKbWlp6fjww8/RHl5Obp3747g4GDs27cPP/30E5KTk/Hrr7+iW7duyMzMxO9//3uD2jUaDdavX48vv/xSf0x3E8pZ9b7wwguYNm0aIiMj9UPDIiIisGPHDgDocG0sWrQIFRUVUCgUCAwMxKpVqzBixAiH1StV886dOyWv5c41O/t6lromAPFrGXDt9XzmzBnJf/9vv/0WaWlpHYY79ujRA4DrPmOpemfNmoVHHnmkQ0jrhoqWlZVhyZIlyMvLQ319PebPn4+WlhYAQK9evZCSkqL/71OK2wY7ERFZx227YoiIyDoMdiIiD8NgJyLyMAx2IiIPw2AnIvIwDHYiIg/DYCci8jD/H9SQdLBBK9iEAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "oDdvojzxjui_",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}